package file

import (
	"BingWallpaper/logger"

	"fmt"
	"os"
	"strings"
)

//	检查图像目录是否存在，若不存在则建立。
//	若出错则程序终止执行，执行完成则表明无问题。
func CheckDir(dir string) {
	logger.Loginfo("检查图片目录是否正常……")
	//logger.Loginfo(dir)
	_, err := os.Stat(dir)

	if err != nil {
		//		查看目录出错
		logger.Loginfo(fmt.Sprint(err))
		if strings.Contains(fmt.Sprint(err), "no such file or directory") {
			logger.Loginfo("没有发现图片目录，将新建目录：" + dir)
			err = os.Mkdir(dir, 0755)
			if err != nil {
				//				创建目录报错
				if strings.Contains(fmt.Sprint(err), "no such file or directory") {
					logger.Loginfo(fmt.Sprint(err))
					logger.Logerr(fmt.Sprintf("%s 目录创建失败，请检查父目录是否存在。", dir))
				} else if strings.Contains(fmt.Sprint(err), "permission denied") {
					logger.Loginfo(fmt.Sprint(err))
					logger.Logerr(fmt.Sprintf("%s 目录创建失败，请检查父目录权限。", dir))
				} else {
					logger.Loginfo(fmt.Sprint(err))
					logger.Logerr(fmt.Sprintf("%s 目录创建失败，请手动创建。", dir))
				}
			} else {
				//				检查目录是否创建成功
				logger.Loginfo("目录创建完成，检查是否创建成功。")
				_, err := os.Stat(dir)
				if err != nil {
					logger.Loginfo(fmt.Sprint(err))
					logger.Logerr("目录创建失败，请手动创建。")
				} else {
					logger.Loginfo("目录创建未出现错误，似乎创建成功了。")
				}
			}
		} else if strings.Contains(fmt.Sprint(err), "permission denied") {
			logger.Logerr("目录检测失败，请检查目录权限。")
		} else {
			logger.Logerr("目录检测失败，请检查原因或尝试手动建立目录。")
		}
	} else {
		logger.Loginfo("目录似乎正常。")
	}

	//创建文件测试目录是否可写
	logger.Loginfo("程序将创建测试文件以检查目录是否可写……")
	f, err := os.Create(dir + "test")
	f.WriteString("test file.")
	f.Close()

	if err != nil {
		//				创建文件报错
		if strings.Contains(fmt.Sprint(err), "no such file or directory") {
			logger.Loginfo(fmt.Sprint(err))
			logger.Logerr(fmt.Sprintf("%s 测试文件创建失败，请检查父目录是否存在。", dir+"test"))
		} else if strings.Contains(fmt.Sprint(err), "permission denied") {
			logger.Loginfo(fmt.Sprint(err))
			logger.Logerr(fmt.Sprintf("%s 测试文件创建失败，请检查父目录权限。", dir+"test"))
		} else {
			logger.Loginfo(fmt.Sprint(err))
			logger.Logerr(fmt.Sprintf("%s 测试文件创建失败，请手动检查失败原因。", dir+"test"))
		}
	} else {
		err = os.Remove(dir + "test")
		if err != nil {
			logger.Loginfo(fmt.Sprint(err))
			logger.Logerr("测试文件移除失败。")
		} else {
			logger.Loginfo("目录可写。")
		}

	}

}

func FileExists(path string) (bool, error) {
	//logger.Loginfo(path)
	_, err := os.Stat(path)
	if err == nil {
		return true, nil
	}
	if os.IsNotExist(err) {
		return false, nil
	}
	return false, err
}
